﻿using System;
using System.Collections.Generic;
using System.Text;

namespace JustMathCore
{
    public class BitArray160
    {
        BitArray160()
        {

        }
        public BitArray[] bitarray = new BitArray[5];
        public static BitArray160 Create()
        {
            BitArray160 btarray = new BitArray160();
            for (var i = 0; i < 5; i++)
            {
                btarray.bitarray[i] = BitArray.Create();
            }

            return btarray;
        }
        public static BitArray160 Load(string path)
        {
            BitArray160 btarray = new BitArray160();
            for (var i = 0; i < 5; i++)
            {
                var file = System.IO.Path.Combine(path, "bloom4G_" + i + ".fbin");
                var data = System.IO.File.ReadAllBytes(file);
                btarray.bitarray[i] = BitArray.FromData(data);
            }

            return btarray;
        }

        public bool Exist(Hex160 hex)
        {
            unsafe
            {
                hex.Unpack(out uint v0,out uint v1,out uint v2,out uint v3,out uint v4);
                if (!bitarray[0][v0])
                    return false;
                if (!bitarray[1][v1])
                    return false;
                if (!bitarray[2][v2])
                    return false;
                if (!bitarray[3][v3])
                    return false;
                if (!bitarray[4][v4])
                    return false;
                return true;
            }

        }
        public void AddTo(Hex160 hex)
        {
            unsafe
            {
                var ptr = hex.ptr;
                bitarray[0][ptr[0]] = true;
                bitarray[1][ptr[1]] = true;
                bitarray[2][ptr[2]] = true;
                bitarray[3][ptr[3]] = true;
                bitarray[4][ptr[4]] = true;
            }
        }
    }
}
